package model;

import observer.NotificationActionOffreManager;
import observer.ObserverOffreManager;
import model.exception.CompteNonValideException;
import model.exception.ForfaitNonValideException;
import model.states.EtatPropositionAcceptee;
import model.states.EtatPropositionRefusee;

public class Employeur extends Personne implements OffreManager{
	
	private Entreprise entreprise;	
	
	public Employeur(String n, String p, String num, String typeV, String nomV, String code, String v,String pa, String ma, int an, int m, int jo, String mdp,String id,String idAgence) {
		super(n, p, num, typeV, nomV, code, v,pa, ma, an, m, jo, mdp,id,idAgence) ;
		addObserver(new ObserverOffreManager());
	}
	
	public void ajouterOffre(Offre o) throws ForfaitNonValideException, CompteNonValideException {
		entreprise.getCompte().solder(AgenceManager.getInstance().getPrixAnnonce(identifiantAgence));
		AgenceManager.getInstance().getListeOffre(identifiantAgence).add(o);
		notificationOffreManager(o,"Ajout");	
	}
	
		
	public void supprimerOffre(Offre o){
		AgenceManager.getInstance().getListeOffre(identifiantAgence).remove(o);
		notificationOffreManager(o,"Suppression");	
	}	
	
	public void modifierOffre(Offre ancienneOffre,Offre nouvelleOffre){		
		AgenceManager.getInstance().getListeOffre(identifiantAgence).set(AgenceManager.getInstance().getListeOffre(identifiantAgence).indexOf(ancienneOffre), nouvelleOffre);
		notificationOffreManager(ancienneOffre,"Modification");	
	}
	/**
	 * @param p la Proposition a acceptee
	 */
	public void accepterProposition(Proposition p){
		p.setEtatProposition(new EtatPropositionAcceptee());		
	}
	/**
	 * @param p la Proposition a refuser
	 */
	public void RefuserProsition(Proposition p){
		p.setEtatProposition(new EtatPropositionRefusee());
	}

	/**
	 * @param entreprise the entreprise to set
	 */
	public void setEntreprise(Entreprise entreprise) {
		this.entreprise = entreprise;
	}

	/**
	 * @return the entreprise
	 */
	public Entreprise getEntreprise() {
		return entreprise;
	}

	public void notificationOffreManager(Offre o, String typeModif) {		
		setChanged();
		notifyObservers(new NotificationActionOffreManager(this, typeModif,o));
		clearChanged();
	}	

}
